今天的文章將延續上一篇「生氣紀錄本」的應用,將 remember
的行為以視覺化呈現。還沒讀過的同學,建議可以先到上一篇瀏覽範例程式碼,會比較好理解 contorl flow 和圖解。
此系列文章是以我的業餘專案: Kimoji 作為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!
立馬下載 限免兌換碼
當我們執行 app 時,畫面會顯示初始狀態:
右側是元件的樹狀結構簡圖,可以幫助我們深入瞭解狀態變更時發生的情況。系統會記住 count 和 showTask 等值。 |
我們現在可以在 app 內操作以下步驟:
count
遞增 (並會觸發 recomposition),並開始顯示 WellnessTaskItem
和生氣次數的 Text
。WellnessTaskItem
元件上的 X (會再度觸發 recomposition)。showTask
現在為 false
,畫面不再顯示 WellnessTaskItem
。showTask
還是會在下次 recomposition 時記得 WellnessTaskItem
已經被關掉了。count
重設為 0
並觸發 recomposition。這時,顯示 count
的生氣次數 Text
,和任何 WellnessTaskItem
相關的程式碼都不會被呼叫,並且會離開 Composition。showTask
的程式碼區塊,因此會移除 showTask
。我們現在等同已經回到第一步了。count
大於 0
(recomposition)。
畫面會再度顯示 WellnessTaskItem
composable,因為 showTask
在上文離開 Composition 的時候,系統已經清除此變數之前的值。
動動腦:如果我們要求 showTask
在 count
變回 0
之後繼續保留,讓保留時間長過 remember
規定 (也就是 remember
所在的程式碼區塊並未在 recomposition 時被呼叫),具體要如何實現呢?
現在我們已經瞭解 UI 和狀態在離開 Composition 時會重設,明天我們會來探討「可觀察的 MutableList
」。
此系列文章是以我的業餘專案:Kimoji 為範例。
Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
立馬下載 限免兌換碼
Reference: https://developer.android.com/codelabs/jetpack-compose-state